package com.java.basis.thread.create;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 线程创建方式三：FutureTask 配合 Thread
 * 可以获取任务的执行结果，还能抛出异常
 * 与Runnable的区别：runnable没有返回结果
 *
 * @author wangning
 * @create 2022-01-13 16:20
 */
@Slf4j(topic = "c.ThreadCreateTest03")
public class ThreadCreateTest03 {
	public static void main(String[] args) throws ExecutionException, InterruptedException {
		//创建任务对象
//		FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>() {
//			@Override
//			public Integer call() throws Exception {
//				log.debug("hello");
//				return 100;
//			}
//		});
		FutureTask<Integer> task = new FutureTask<>(() -> {
			log.debug("hello");
			return 100;
		});

		//参数1 是任务对象，参数2 是线程名称
		new Thread(task, "task").start();
		//主线程阻塞，同步等待 task 执行完毕结果
		Integer result = task.get();
		log.debug("result:{}", result);

	}
}
